package com.tbit.uqbike.webmanager.dao.log;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.tbit.config.datasource.DataSource;
import com.tbit.uqbike.object.pojo.MachineFaultLog;
import com.tbit.uqbike.object.pojo.dto.FaultReportDTO;
import com.tbit.common.entity.pojo.vo.LineChartVO;
import com.tbit.uqbike.object.pojo.vo.MachineFaultLogVo;
import com.tbit.uqbike.object.pojo.vo.MachineFaultPersonVo;
import com.tbit.uqbike.object.pojo.vo.MachineFaultVehicleVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @Author LHX
 * @ClassName FaultReportDao
 * @Description
 * @date 2023/5/19 11:37
 * @Version 1.0
 */
@DS(DataSource.LOG)
public interface FaultReportDao {
    /**
     * 分页查询故障上报详情
     *
     * @param faultReportDTO
     * @return
     */
    List<MachineFaultLogVo> queryPageDetails(FaultReportDTO faultReportDTO);

    /**
     * 故障上报车辆总览
     *
     * @param faultReportDTO
     */
    List<MachineFaultVehicleVo> queryPageVehicle(FaultReportDTO faultReportDTO);

    /**
     * 故障上报人员总览
     *
     * @param faultReportDTO
     * @return
     */
    List<MachineFaultPersonVo> queryPagePerson(FaultReportDTO faultReportDTO);


    /**
     * 根据车辆id查询最新的一条上报记录
     *
     * @param machineId
     * @return
     */
    MachineFaultLog selectNewestLog(@Param("machineId") Integer machineId);


    /**
     * 插入日志
     *
     * @param machineFaultLog
     */
    void insert(MachineFaultLog machineFaultLog);

    Integer getCountByMachineIdAndDay(@Param("machineId") Integer machineId, @Param("day") Integer day, @Param("count") Integer count);

    /**
     * 查询维修信息
     *
     * @param faultReportDTO f
     * @return list
     */
    List<MachineFaultLogVo> queryPageDetailsNew(FaultReportDTO faultReportDTO);

    /**
     * 查询维修折线图
     *
     * @param accountId 区域id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return List<LineChartVO>
     */
    List<LineChartVO> getMachineFaultLineChart(@Param("accountId") Integer accountId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
}
